package Offer15;

/**
 * @author 23737
 * @time 2021.9.21
 * 二进制中1的个数：
 * 编写一个函数，输入是一个无符号整数（以二进制串的形式），返回其二进制表达式中数字位数为 '1' 的个数（也被称为 汉明重量).）。
 */
public class Test {
    public static void main(String[] args) {
        //可以用位运算来代替取余运算，N%M = N&(M-1)
//        int a = 11;
//        System.out.println(a%2);
//        System.out.println(a&1);
    }
}

class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        return Integer.bitCount(n);
    }
}

//这个具体实现，但是我看不懂
//    public static int bitCount(int i) {
//        // HD, Figure 5-2
//        i = i - ((i >>> 1) & 0x55555555);
//        i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
//        i = (i + (i >>> 4)) & 0x0f0f0f0f;
//        i = i + (i >>> 8);
//        i = i + (i >>> 16);
//        return i & 0x3f;
//    }
